From: Jasper St. Pierre Date: Fri, 1 Mar 2013 20:33:39 +0000 (-0500) Subject: layout: Move tray-specific event filtration to the user of PressureBarrier X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~4553 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=337d2da38a9fb4caadf9d478c38730ee67dedccd;p=gnome-shell.git layout: Move tray-specific event filtration to the user of PressureBarrier For the HotCorner, we want to have different logic for tossing out specific events based on the grabbed state, etc. so make us have to pass in an event filter callback. --- diff --git a/js/ui/layout.js b/js/ui/layout.js index 29703c8b0..7020c3053 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -446,11 +446,22 @@ const LayoutManager = new Lang.Class({ MESSAGE_TRAY_PRESSURE_TIMEOUT, Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.OVERVIEW); + this._trayPressure.setEventFilter(this._trayBarrierEventFilter); this._trayPressure.connect('trigger', function(barrier) { Main.messageTray.openTray(); }); }, + _trayBarrierEventFilter: function(event) { + // Throw out all events where the pointer was grabbed by another + // client, as the client that grabbed the pointer expects to have + // complete control over it + if (event.grabbed && Main.modalCount == 0) + return true; + + return false; + }, + _monitorsChanged: function() { this._updateMonitors(); this._updateBoxes(); @@ -1268,6 +1279,7 @@ const PressureBarrier = new Lang.Class({ this._timeout = timeout; this._keybindingMode = keybindingMode; this._orientation = (barrier.y1 == barrier.y2) ? Clutter.Orientation.HORIZONTAL : Clutter.Orientation.VERTICAL; + this._eventFilter = null; this._isTriggered = false; this._reset(); @@ -1282,6 +1294,10 @@ const PressureBarrier = new Lang.Class({ this._barrier = null; }, + setEventFilter: function(filter) { + this._eventFilter = filter; + }, + _reset: function() { this._barrierEvents = []; this._currentPressure = 0; @@ -1343,10 +1359,7 @@ const PressureBarrier = new Lang.Class({ if (this._isTriggered) return; - // Throw out all events where the pointer was grabbed by another - // client, as the client that grabbed the pointer expects to have - // complete control over it - if (event.grabbed && Main.modalCount == 0) + if (this._eventFilter && this._eventFilter(event)) return; // Throw out all events not in the proper keybinding mode